cMapController = new MyClass({
	vMaps 	: null, //vector de mapas
	iActive	: null, //indice del mapa activo
	ultPos	: null,
	vehiculosVisiblesGral : null,
	vMapasVisibles : null,

	init	: function(){
		this.vMaps = new Array();
		this.ultPos = 0;
		this.vehiculosVisiblesGral = new Array();
		this.vMapasVisibles = new Array();
		OpenLayers.Control.DefaultEvents = OpenLayers.Class(OpenLayers.Control, {
	        defaultHandlerOptions: {
	            'single': true,
	            'double': true,
	            'pixelTolerance': 0,
	            'stopSingle': false,
	            'stopDouble': false
	        },
	
	        initialize: function(options) {
	            this.handlerOptions = OpenLayers.Util.extend(
	                {}, this.defaultHandlerOptions
	            );
	            OpenLayers.Control.prototype.initialize.apply(
	                this, arguments
	            );
	            this.handler = new OpenLayers.Handler.Click(
	                this, {
	                    'click': this.onClick,
						'dblclick': this.onDblClick
	                }, this.handlerOptions
	            );
	        },

	        onClick: function(e) {
			},
	
			onDblClick: function(e) {
			}
		});
	},

	addMap : function(map,i){

		this.vMaps[i] = map;
		this.vMaps[i].setId(i);
		//this.ultPos = this.ultPos + 1;
		var pos = indexOfArray(this.vMapasVisibles,i);
		if (pos==-1){
			this.vMapasVisibles.push(i);
		}
		//this.iActive = i;
		return i;
	},
	removeMap: function(posMap){
		this.vMaps[posMap] = null;
		var pos = indexOfArray(this.vMapasVisibles,posMap);
		if (pos!=-1){
			this.vMapasVisibles.splice(pos,1);
		}
		$j("#map_canvas"+posMap).html("");
		var ant = -99;
		for(var i=0; i<6 ; i++){
			if(this.vMaps[i] != null && i != posMap){
				this.iActive = i;
				break;
			}
		}
		this.updateMovilVisiblesGral();
		return ant;
	},
	addMovilVisiblesGral : function(movil){//no se usa
		var pos = indexOfArray(this.vehiculosVisiblesGral,movil);
		if (pos == -1){//esta?
			this.vehiculosVisiblesGral.push(movil);
		}
	},
	removeMovilVisiblesGral : function(movil){
		var pos = indexOfArray(this.vehiculosVisiblesGral,movil);
		if (pos!=-1){
			this.vehiculosVisiblesGral.splice(pos,1);
		}
	},
	updateMovilVisiblesGral: function(){
		this.vehiculosVisiblesGral = new Array();
		for(var i=0;i<this.vMaps.length;i++){
			if(this.vMaps[i] != null){
				if(this.vMaps[i].getVehiculosVisiblesId().length>0){
					var vListaVehiculos = this.vMaps[i].getVehiculosVisiblesId();
					for(var j=0; j<vListaVehiculos.length;j++){
						var movil 	= vListaVehiculos[j];
						var pos = indexOfArray(this.vehiculosVisiblesGral,movil);
						if (pos==-1){
							this.vehiculosVisiblesGral.push(movil);
						}
					}
					//this.vehiculosVisiblesGral.push(this.vMaps[i].getVehiculosVisiblesId());
				}
			}
		}
	},
	//////////////////SETTER///////////////////
	setMapasVisibles	: function(mapasV){
		this.vMapasVisibles = mapasV;
	},
	setMaps : function(map){
		this.vMaps = map;
	},

	setVehiculosVisiblesGral: function(vehiculosVisiblesGralX){
		this.vehiculosVisiblesGral = vehiculosVisiblesGralX;
	},

	setActive 	: function(i){
		this.iActive = i;
	},
	///////////////////////GETTER//////////////
	getMapasVisibles	: function(){
		return this.vMapasVisibles;
	},
	getMapById	: function(id){
		return this.vMaps[id];
	},

	getMapActive: function(){
		return this.vMaps[this.iActive];
	},

	getVehiculosVisiblesGral: function(){
		return this.vehiculosVisiblesGral;
	},

	getMaps: function(){
		var arrayMaps = new Array();
		var j =0;
		for(var i=0;i<this.vMaps.length;i++){
			if(this.vMaps[i] != null){
				arrayMaps[j] = this.vMaps[i];
				j++;
			}
		}
		return arrayMaps;
	},

	getActive: function(){
		return this.iActive;
	},
	////////////////////////////////////////////////
	refreshPosicSimpleViewMovilMaps: function(vehiculoId){
		for(var i=0;i<this.vMaps.length;i++){
			if(this.vMaps[i] != null){
				var pos = indexOfArray(this.vMaps[i].getVehiculosVisiblesId(),vehiculoId.toString());
				if (pos != -1){//esta?
					this.vMaps[i].putSimpleIconCar(vehiculoId);
					var movil = misVehiculosHash.get(this.vMaps[i].getCuentaSeguimiento());
					if(movil!= null && movil.POSIMOVIL!=null){
						var lonlat = new OpenLayers.LonLat(parseFloat(movil.POSIMOVIL.longitud), parseFloat(movil.POSIMOVIL.latitud)).transform(this.vMaps[i].getDisplayProjection(), this.vMaps[i].getProjection());
						this.vMaps[i].getMap().panTo(lonlat);
						this.vMaps[i].imprimirEstelaSeguimiento();
					}
				}
			}
		}
	},

	refreshPosicMovilMaps: function(vehiculoId){
		for(var i=0;i<this.vMaps.length;i++){
			if(this.vMaps[i] != null){
				var pos = indexOfArray(this.vMaps[i].getVehiculosVisiblesId(),vehiculoId.toString());
				if (pos != -1){//esta?
					this.vMaps[i].putIconCar(vehiculoId);
					var movil = misVehiculosHash.get(this.vMaps[i].getCuentaSeguimiento());
					if(movil!= null && movil.POSIMOVIL!=null){
						var lonlat = new OpenLayers.LonLat(parseFloat(movil.POSIMOVIL.longitud), parseFloat(movil.POSIMOVIL.latitud)).transform(this.vMaps[i].getDisplayProjection(), this.vMaps[i].getProjection());
						this.vMaps[i].getMap().panTo(lonlat);
						this.vMaps[i].imprimirEstelaSeguimiento();
					}
				}
			}
		}
	},

	initMaps:  function(){
		////////////FIJOS////////////
		if(LOGIN.objetivoDB == 5 || LOGIN.objetivoDB == 1){
			var	fijosVisiblesId = new Array();
			if (FIJOS_VISIBLES.length>0){
				fijosVisiblesId = FIJOS_VISIBLES.split(",");
				this.vMaps[this.vMapasVisibles[0]].setFijosVisiblesId(fijosVisiblesId);
			}
			function onSelectFijoSimple(event){
				var feature = event.feature;
				createPopUpFijo(event, feature.attributes.fijoId.toString(), feature.id+"_label");
				cMapController.getMapActive().getSelectFijoSimple().unselectAll();
			}
			if (FIJ_SIMPLEVIEW==1){
				for(var i=0;i<this.vMapasVisibles.length;i++){
					iMapaVisible = this.vMapasVisibles[i];
					this.vMaps[iMapaVisible].setFijosSimpleLayer(new OpenLayers.Layer.Vector("FijosSimpleView"));
					this.vMaps[iMapaVisible].setSelectFijoSimple(new OpenLayers.Control.SelectFeature(this.vMaps[iMapaVisible].getFijosSimpleLayer(), {clickout:false, hover:false}));
					this.vMaps[iMapaVisible].getFijosSimpleLayer().setMap(this.vMaps[iMapaVisible].getMap());
					this.vMaps[iMapaVisible].getFijosSimpleLayer().events.on({ "beforefeatureselected": function(evt){
						var idMap = evt.object.map.div.id.split("map_canvas");
						clickMap5(idMap[1]);
					}
					});
					//this.vMaps[iMapaVisible].getFijosSimpleLayer().events.on({ "featureselected": onSelectFijoSimple });
				}
			}
			
			for(var i=0;i<this.vMapasVisibles.length;i++){
				iMapaVisible = this.vMapasVisibles[i];
				this.vMaps[iMapaVisible].setFijosLayer(new OpenLayers.Layer.Markers( "Fijos" ));//capa del mapa en donde se imprimen los iconos pertenecientes a los fijos.
				this.vMaps[iMapaVisible].setMisFijosMarkersHash(new Hashtable());
			}
			if(LOGIN.objetivoDB == 1){
				for(var i=0;i<this.vMapasVisibles.length;i++){
					iMapaVisible = this.vMapasVisibles[i];
					this.vMaps[iMapaVisible].setMenuOpcion("fijos");
				}
			}
		}
		////////MOVILES///////////
		var vehiculosVisiblesId = new Array();
		if (MOVILES_VISIBLES.length>0){
			vehiculosVisiblesId = MOVILES_VISIBLES.split(",");
			cMapController.addMovilVisiblesGral(vehiculosVisiblesId);
			this.vMaps[this.vMapasVisibles[0]].setVehiculosVisiblesId(vehiculosVisiblesId);
		}
		if (VEH_SIMPLEVIEW==1){
			for(var i=0;i<this.vMapasVisibles.length;i++){
				iMapaVisible = this.vMapasVisibles[i];
				this.vMaps[iMapaVisible].setVehiculosSentidosSimpleLayer(new OpenLayers.Layer.Markers( "VehiculosSentidos" ));
				this.vMaps[iMapaVisible].setVehiculosSimpleLayer(new OpenLayers.Layer.Vector("VehiculosSimpleView"));
				this.vMaps[iMapaVisible].setSelectVehiculoSimple(new OpenLayers.Control.SelectFeature(this.vMaps[iMapaVisible].getVehiculosSimpleLayer(), {clickout:false, hover:false}) );
				this.vMaps[iMapaVisible].getVehiculosSimpleLayer().setMap( this.vMaps[iMapaVisible].getMap() );
			}
		}

		if (trim(PUNTOSVISIBLES_string)!='') {
			this.vMaps[this.vMapasVisibles[0]].setPuntosVisiblesId(PUNTOSVISIBLES_string.split(","));
		}
		if (trim(ZONASVISIBLES_string)!=''){
			misZonasVisiblesId = ZONASVISIBLES_string.split(",");
			this.vMaps[this.vMapasVisibles[0]].setZonasVisiblesId(ZONASVISIBLES_string.split(","));
		}

		for(var i=0;i<this.vMapasVisibles.length;i++){
			iMapaVisible = this.vMapasVisibles[i];
			this.vMaps[iMapaVisible].setVehiculosLayer(new OpenLayers.Layer.Markers( "Vehiculos" ));//capa del mapa en donde se imprimen los iconos pertenecientes a los vehiculos.
			this.vMaps[iMapaVisible].setMisVehiculosMarkersHash(new Hashtable());
		}
	},
	initNewMap: function(nro){
		////////////FIJOS////////////
		if(LOGIN.objetivoDB == 5 || LOGIN.objetivoDB == 1){
			function onSelectFijoSimple(event){
				var feature = event.feature;
				//clickMap2(feature.attributes.fijoId);
				cMapController.getMapActive().getSelectFijoSimple().unselectAll();
			}
			if (FIJ_SIMPLEVIEW){
				this.vMaps[nro].setFijosSimpleLayer(new OpenLayers.Layer.Vector("FijosSimpleView"));
				this.vMaps[nro].setSelectFijoSimple(new OpenLayers.Control.SelectFeature(this.vMaps[nro].getFijosSimpleLayer(), {clickout:false, hover:false}));
				this.vMaps[nro].getFijosSimpleLayer().events.on({ "featureselected": onSelectFijoSimple });
				this.vMaps[nro].getMap().addLayer(this.vMaps[nro].getFijosSimpleLayer());//layer simple para fijos
				this.vMaps[nro].getFijosSimpleLayer().div.style.zIndex = 900;
			}
			this.vMaps[nro].setFijosLayer(new OpenLayers.Layer.Markers( "Fijos" ));//capa del mapa en donde se imprimen los iconos pertenecientes a los fijos.
			this.vMaps[nro].setMisFijosMarkersHash(new Hashtable());
			this.vMaps[nro].getMap().addLayer(this.vMaps[nro].getFijosLayer());
			this.vMaps[nro].getFijosLayer().div.style.zIndex = 901;
		}

		if(LOGIN.objetivoDB == 1){
			this.vMaps[nro].setMenuOpcion("fijos");
		}
		
		
		function onSelectVehiculoSimple(event){
			var feature = event.feature;
			vehiculoOnClick(event, feature.attributes.movilId.toString());
			cMapController.getMapActive().getSelectVehiculoSimple().unselectAll();
		}
		if (VEH_SIMPLEVIEW==1){
		   this.vMaps[nro].setVehiculosSentidosSimpleLayer(new OpenLayers.Layer.Markers( "VehiculosSentidos" ));
		   this.vMaps[nro].setVehiculosSimpleLayer(new OpenLayers.Layer.Vector("VehiculosSimpleView"));
		   this.vMaps[nro].setSelectVehiculoSimple(new OpenLayers.Control.SelectFeature(this.vMaps[nro].getVehiculosSimpleLayer(), {clickout:false, hover:false}));
		   this.vMaps[nro].getVehiculosSimpleLayer().setMap(this.vMaps[nro].getMap());
		  /* this.vMaps[nro].getVehiculosSimpleLayer().events.on({ "beforefeatureselected": function(evt){
			   var idMap = evt.object.map.div.id.split("map_canvas");
			   clickMap5(idMap[1]);
		   	}
		   });
		   this.vMaps[nro].getVehiculosSimpleLayer().events.on({ "featureselected": onSelectVehiculoSimple });*/
		   this.vMaps[nro].getMap().addLayer(this.vMaps[nro].getVehiculosSimpleLayer());//layer simple para moviles
		   this.vMaps[nro].getMap().addLayer(this.vMaps[nro].getVehiculosSentidosSimpleLayer());//layer sentidos simple para moviles
		   this.vMaps[nro].getVehiculosSimpleLayer().div.style.zIndex = 900;
		}

		this.vMaps[nro].setVehiculosLayer(new OpenLayers.Layer.Markers( "Vehiculos" ));//capa del mapa en donde se imprimen los iconos pertenecientes a los vehiculos.
		this.vMaps[nro].setMisVehiculosMarkersHash(new Hashtable());
		this.vMaps[nro].getMap().addLayer(this.vMaps[nro].getVehiculosLayer());//layer de iconos para moviles
		this.vMaps[nro].getVehiculosLayer().div.style.zIndex = 900;
		
	
		//puntos
		this.vMaps[nro].getMap().addLayer(this.vMaps[nro].getMisPuntosLayer());
	},

	initMapEvent: function(j) {
		cMapController.getMapById(j).getMap().events.on({
			"addlayer": function(){
				var MarkersLayers = cMapController.getMapActive().getMap().getLayersByClass(cMapController.getMapActive().getVehiculosLayer().CLASS_NAME);
				for (var i=0; i<MarkersLayers.length; i++){
					MarkersLayers[i].div.style.zIndex = 902;
				}
			},
			"removelayer": function(){
				var MarkersLayers = cMapController.getMapActive().getMap().getLayersByClass(cMapController.getMapActive().getVehiculosLayer().CLASS_NAME);
				for (var i=0; i<MarkersLayers.length; i++){
					MarkersLayers[i].div.style.zIndex = 902;
				}
			}
		});
		this.vMaps[j].setDefaultEvents(new OpenLayers.Control.DefaultEvents());
		this.vMaps[j].getMap().addControl(this.vMaps[j].getDefaultEvents());
		this.vMaps[j].getDefaultEvents().activate();
	},

	initMapEvents: function() {
		for(var j=0;j<this.vMaps.length;j++){
			if(this.vMaps[j] != null){
				this.initMapEvent(j);
			}
		}
		if (LOGIN.PERMISOS[7])
			initMisPuntosEvents();
		if (LOGIN.PERMISOS[8])
			initMisZonasEvents();
		if (LOGIN.PERMISOS[21])
			initMisRutasEvents();
	},

	CargarMisPuntos: function() {
		for(var i=0;i<this.vMaps.length;i++){
			if(this.vMaps[i] != null){
				this.vMaps[i].getMap().addLayer(this.vMaps[i].getMisPuntosLayer());
			}
		}
    	reqParamsMisPuntos = "COMMAND=MISPUNTOS";
    	reqParamsMisPuntos += "&CUENTA=" + LOGIN.cuentaFk;
		reqParamsMisPuntos += "&ESFLOTA=" + LOGIN.objetivoDB;
		reqParamsMisPuntos += "&OBJETIVO="+ LOGIN.objetivo;
		reqParamsMisPuntos += "&TABLAID="+ LOGIN.tablaId;
		reqParamsMisPuntos += "&ISBYKOM="+ LOGIN.isBykom;
    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    	if (msie)
            reqHandlerMisPuntos = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerMisPuntos = new XMLHttpRequest();
        reqHandlerMisPuntos.onreadystatechange = OnReadyStateChangeMisPuntos;
        reqHandlerMisPuntos.open("POST", "querycontroller.php", true);
        reqHandlerMisPuntos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        reqHandlerMisPuntos.send(reqParamsMisPuntos);
    },
    guardarConfiguracionGral: function(){
    	if(confirm("Esta seguro de guardar la configuracion para todos los mapas?")){
    		var mapas = "";
    		var coma = "";
	    	for(var i=0;i<this.vMaps.length;i++){
				if(this.vMaps[i] != null){
					this.vMaps[i].guardarConfiguracion(i,true);
					mapas += coma + i;
					coma = ",";
				}
			}
	    	var objetivo 	= LOGIN.objetivo;
			var tablaId 	= LOGIN.tablaId;
	    	$j.ajax({
			      type: "POST",
			      url: "sections/queryConfig.php",
			      data: "COMMAND=GUARDARCONFCANTMAPAS&MAPASID="+mapas+"&CUENTAID="+tablaId+"&OBJETIVO="+objetivo+"",
			      beforeSend: function(){
					$j('#LoaderAjax').show();
			      },
			      success: function(data) {
			    	$j('#LoaderAjax').hide();
			    	data = jQuery.parseJSON(data);
			    	if(data==true){
			    		alert("Se guardo la configuracion gerenal correctamente");
			    	}else{
			    		alert("No se guardo la configuracion gerenal correctamente");
			    	}
			      }
			});
    	}
    },
	/**
	 * toma la cantidad de mapas que tiene guardado en su configuracion el 
	 * usuario
	 */
    getConfiguracionCantMapas: function(){
    	var objetivo 	= LOGIN.objetivoDB;
		var tablaId 	= LOGIN.tablaId;
    	$j.ajax({
		      type: "POST",
		      url: "sections/queryConfig.php",
		      data: "COMMAND=GETCONFIGCANTIDADMAPA&CUENTAID="+tablaId+"&OBJETIVO="+objetivo+"",
		      beforeSend: function(){
				$j('#LoaderAjax').show();
		      },
		      success: function(data) {
		    	$j('#LoaderAjax').hide();
		    	data = jQuery.parseJSON(data);
				if(data.length>0){
					for(var i=0; i<data.length; i++){
						cMapController.getMapasVisibles().push(data[i].mapa);
					}
		    	}
				initialize();
		      }
		});
    },
    /** 
     * oculto el pa�o del 'loading'
     * y luego carga la configuracion de cada mapa
     */
    finCargaInicial: function(){
		document.getElementById('mapLoadingPanel').style.display = "none";
		for(var i=0;i<cantMapas;i++){
			if(this.vMapasVisibles.length>0){
				iMapaVisible = this.vMapasVisibles[i];
			}else{
				iMapaVisible = i;
			}
			this.vMaps[iMapaVisible].getConfiguracionByMap(iMapaVisible);
		}
    },
	
	/**
	 * RUTAS
	 */
	cargarMisRutas: function(){
    	var objetivo 	= LOGIN.objetivo;
		var tablaId 	= LOGIN.tablaId;
		var isBykom		= LOGIN.isBykom;
    	$j.ajax({
		      type: "POST",
		      url: "querycontroller.php",
		      data: "COMMAND=CARGARMISRUTAS&CUENTAID="+tablaId+"&OBJETIVO="+objetivo+"&ISBYKOM="+isBykom+"",
		      beforeSend: function(){
				$j('#LoaderAjax').show();
		      },
		      success: function(data) {
		    	$j('#LoaderAjax').hide();
		    	misRutas = jQuery.parseJSON(data);
				if (misRutas.length != 'undefined') {		
					for (i=0; i<misRutas.length; i++){
						misRutasHash.put(misRutas[i].id.toString(), misRutas[i]);
					}				
					for(var i=0;i<cMapController.getMapasVisibles().length;i++){
						iMapaVisible = cMapController.getMapasVisibles()[i];
						cMapController.getMapById(iMapaVisible).refreshViewRutas();
					}
		    	}else{
		    		$j("#divListaRutas").html("No hay rutas registradas");
		    	}
				cMapController.finCargaInicial();
		      }
		});
    }
});